package com.jzo2o.foundations.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jzo2o.api.foundations.dto.response.ServeItemResDTO;
import com.jzo2o.api.foundations.dto.response.ServeItemSimpleResDTO;
import com.jzo2o.api.foundations.dto.response.ServeTypeCategoryResDTO;
import com.jzo2o.common.model.PageResult;
import com.jzo2o.foundations.model.domain.Serve;
import com.jzo2o.foundations.model.domain.ServeItem;
import com.jzo2o.foundations.model.dto.request.ServeItemPageQueryReqDTO;
import com.jzo2o.foundations.model.dto.request.ServeItemUpsertReqDTO;
import com.jzo2o.foundations.model.dto.request.ServePageQueryReqDTO;
import com.jzo2o.foundations.model.dto.request.ServeUpsertReqDTO;
import com.jzo2o.foundations.model.dto.response.ServeAggregationSimpleResDTO;
import com.jzo2o.foundations.model.dto.response.ServeResDTO;
import org.apache.ibatis.annotations.Select;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 区域服务实现类
 * </p>
 *
 * @author itcast
 * @since 2023-07-03
 */
public interface IServeService extends IService<Serve> {

    /**
     * 区域服务分页查询
     *
     * @param servePageQueryReqDTO
     * @return
     */
    PageResult<ServeResDTO> page(ServePageQueryReqDTO servePageQueryReqDTO);

    /**
     * 区域批量新增服务项
     *
     * @param serveUpsertReqDto
     */
    void add(List<ServeUpsertReqDTO> serveUpsertReqDto);

    /**
     * 修改服务项价格
     *
     * @param id
     * @param price
     */
    void updatePrice(Long id, BigDecimal price);

    /**
     * 服务项上架
     *
     * @param id
     */
    Serve onSale(Long id);

    /**
     * 服务项删除
     *
     * @param id
     */
    void removeById(Long id);

    /**
     * 服务项下架
     *
     * @param id
     */
    void offSale(Long id);

    /**
     * 服务项置顶
     *
     * @param id
     */
    void onHot(Long id);

    /**
     * 服务项取消置顶
     *
     * @param id
     */
    void offHot(Long id);

    /**
     * 查询区域服务信息并进行缓存
     * @param id 对应serve表的主键
     * @return 区域服务信息
     */
    Serve queryServeByIdCache(Long id);

    ServeAggregationSimpleResDTO queryServeDetailCache(Long id);

}
